home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #119 (1991-03)(Amiga User Group Deutschland e.V.).zip
/
Franz PD Disk #119 (1991-03)(Amiga User Group Deutschland e.V.).adf
/
Assembler_Programme
/
Color.source
< prev
next >
Wrap
Text File
|
1989-07-03
|
6KB
|
145 lines
;»»»»»»»»»»»»»»»»»»»»»» COLOR nr,rgb nr,rgb ...«««««««««««««««««««««««
;» «
;» Ändert den Inhalt mehrer Farbregister vom CLI aus. «
;» «
;» Parameter: nr = 2-stellige Nummer | rgb = 3-stellige Hexzahl für «
;» des Farbregisters: | die Farbmischung «
;» 00 - 31 | Ziffern: 0-9, dann A-F «
;» «
;» Zwischen einem Parametersatz (nr,rgb) und dem nächsten muß 1 Leer-«
;» zeichen stehen ! «
;» «
;» © Juni 1989 by Michael Gottwald «
;»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»«««««««««««««««««««««««««««««««««««
OpenLib = -408
CloseLib = -414
SetRGB4 = -288
Exit = -144
run:
;----Librarys öffnen--------------------------------------------------
move.l a0,Pointer ;Zeiger auf Parametertext retten
subq #1,d0
beq error ;keine Parameter ? - dann Fehler
move.l $4,a6 ;Exec_Base holen
lea DosName,a1
jsr OpenLib(a6) ;Dos-Library öffnen
move.l d0,DosBase
lea GfxName,a1
jsr OpenLib(a6) ;Graphics-Library öffnen
move.l d0,GfxBase
lea IntName,a1
jsr OpenLib(a6) ;Intuition.Library öffnen
move.l d0,IntBase
;----Aktuellen ViewPort holen und ablegen-----------------------------
move.l d0,a0
move.l $38(a0),a0 ;Aktuellen Screenhandle holen
add.l #$2c,a0 ;...auf ViewPort biegen...
move.l a0,ViewPort ;...und ablegen
;----Erstes Zeichen suchen und auf Ende ("CR" Code 13) prüfen---------
look: move.l Pointer,a0 ;Zeiger auf Parametertext holen
loop: cmp.b #32,(a0)+ ;Leerzeichen überlesen
beq loop
subq.l #1,a0
cmp.b #13,(a0) ;CR-Code (RETURN) gefunden ?
beq end ;ja, dann beenden
;----Parameter auswerten----------------------------------------------
move.l #0,a1
bsr getchar ;Ziffer auswerten
mulu #10,d0 ;erste Ziffer = Zehner
exg d0,a1 ;nach A1 retten
bsr getchar ;Einer holen
add.l d0,a1 ;in A1 steht nun die Farbreg.nr.
cmp.b #44,(a0)+ ;auf Komma prüfen
bne error ;falls nicht gefunden, Fehler
bsr gethex ;Hexzahl-Ziffer auswerten
exg d0,d1 ;Rot-Wert nach D1
bsr gethex ;nächste Ziffer...
exg d0,d2 ;Grün-Wert nach D2
bsr gethex ;letzte Ziffer...
exg d0,d3 ;Blau-Wert nach D3
move.l a0,Pointer ;Zeiger retten
exg a1,d0 ;Farbregisternummer nach D0
move.l GfxBase,a1 ;Endadresse der Graphics-Lib. holen
move.l ViewPort,a0 ;Zeiger auf ViewPort...
jsr SetRGB4(a1) ;Farbregister ändern
brk: jmp look ;Nächsten Parametersatz oder Ende
;suchen
;----Dezimalziffer holen und überprüfen-------------------------------
getchar: clr.l d0
move.b (a0)+,d0 ;Zeichen (Ziffer) holen
cmp.b #47,d0 ;Zeichencode >= 48 ("0") ?
bls error ;<= 47, dann Fehler
cmp.b #57,d0 ;Zeichencode <= 57 ("9") ?
bgt error ;> 57, dann Fehler
sub.l #48,d0 ;Zeichencode - 48 = Ziffernwert
rts
;----Hexadezimalziffer holen und überprüfen---------------------------
gethex: clr.l d0
move.b (a0)+,d0
cmp.b #47,d0
bls error
cmp.b #57,d0
bgt chkhex ;auf Hexadezimal (A-F) prüfen
sub.l #48,d0
rts
chkhex: cmp.b #64,d0 ;Zeichencode >= 65 ("A") ?
bls error ;kleiner, dann Fehler
cmp.b #70,d0 ;<= 70 ("F") ?
bgt little ;> 70, dann auf Kleinbuchst. prüfen
sub.l #55,d0 ;Zeichencode - 55 = Ziffernwert
rts
little: cmp.b #96,d0 ;<= 96 ("a") ?
bls error
cmp.b #102,d0 ;<= 102 ("f") ?
bgt error
sub.l #87,d0
rts
;----Librarys schließen-----------------------------------------------
end2: move.l $4,a6
move.l IntBase,a1
jsr CloseLib(a6) ;Intuition-Library schließen
move.l GfxBase,a1
jsr CloseLib(a6) ;Graphics-Library schließen
move.l DosBase,a6
;jsr exit(a6) ;Ende des Programms
rts
;----Ende (alles o.k.)------------------------------------------------
end: clr.l d1 ;Return-Code = 0 (kein Fehler)
bra end2
;----Fehler (und beenden)---------------------------------------------
error: move.l #1,d1 ;Return-Code = 1 (Fehler)
bra end2
;---------------------------------------------------------------------
even
IntName: dc.b "intuition.library",0
IntBase: dc.l 0
GfxName: dc.b "graphics.library",0,0
GfxBase: dc.l 0
DosName: dc.b "dos.library",0
DosBase: dc.l 0
ViewPort: dc.l 0
Pointer: dc.l 0